package com.itheima.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.itheima.entity.Result;
import com.itheima.pojo.Role;
import com.itheima.service.RoleService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import com.itheima.constant.MessageConst;
import com.itheima.constant.RedisConst;
import com.itheima.entity.PageResult;
import com.itheima.entity.QueryPageBean;
import com.itheima.entity.Result;
import com.itheima.pojo.Role;
import com.itheima.service.RoleService;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@Slf4j
@RestController
@RequestMapping("/role")
public class RoleController {
    @Reference
    RoleService roleService;

    @RequestMapping("/findByPage.do")
    public Result findByPage(@RequestBody QueryPageBean queryPageBean) {
            log.debug("-----------正在执行角色的查询所有方法------------");

            //调用 service层的查询所有角色方法
             PageResult pageResult =  roleService.findByPage(queryPageBean);;
            log.debug("---------------------------查询所有用户数据成功:"+pageResult );
            //返回结果
         return new Result(true, MessageConst.ACTION_SUCCESS, pageResult);

    }

    @RequestMapping("/findRoleById.do")
    public Result findRoleById(Integer id) {
        log.debug("-----------正在执行角色的根据id查询对应的角色的方法------------");

        //调用 service层的查询所有角色方法
        Role role =  roleService.findRoleById(id);
        log.debug("---------------------------查询所有用户数据成功:"+role );
        //返回结果
        return new Result(true, MessageConst.ACTION_SUCCESS, role);

    }

    @RequestMapping("/edit.do")
    public Result edit( Integer[] permissionIds,Integer[] menusIds,@RequestBody Role role) {
        log.debug("--------------正在执行角色的更新角色数据的方法--------------------");

        log.debug("获取到到role对象:"+role);
        log.debug("获取到到权限数组对象:"+permissionIds);
        log.debug("获取到到菜单menusId数组象:"+menusIds.toString());
        //调用 service层的查询edit方法
        roleService.editRole(role);
        //获取角色id
        Integer id = role.getId();
        //根据角色id添加对应的权限id
        roleService.editRoleIdAndPermissionId(id,permissionIds);
        //根据角色id添加对应的菜单id
        roleService.editRoleIdAndMenuId(id,menusIds);
        log.debug("---------------------角色数据更新成功");
        return new Result(true,MessageConst.ACTION_SUCCESS);



    }



    @RequestMapping("/add.do")
    public Result add( Integer[] permissionIds,Integer[] menusIds,@RequestBody Role role) {
        log.debug("-----------正在执行角色的添加角色数据的方法------------");


        log.debug("===============================获取到到role对象:"+role);
        log.debug("===============================获取到到权限数组对象:"+permissionIds);
        log.debug("===============================获取到到菜单menusId数组象:"+menusIds.toString());

        roleService.add(role,permissionIds,menusIds);

        log.debug("---------------------------添加角色数据成功:"+role );
        //返回结果
        return new Result(true, MessageConst.ACTION_SUCCESS);

    }

    @RequestMapping("/del.do")
    public Result del(Integer id) {
        log.debug("-----------正在执行角色的删除方法------------");

        //调用 service层的查询所有角色方法
         roleService.del(id);
        log.debug("---------------------------删除角色数据成功:" );
        //返回结果
        return new Result(true, MessageConst.ACTION_SUCCESS);

    }



    @RequestMapping("/findAll")
    public Result findAll(){
        List<Role> roleList = roleService.findAll();

        log.debug(roleList.toString()+"-----------------------");
        return new Result(true, "查询所有角色成功", roleList);
    }

}
